import axios from 'axios';
import { showMessage } from "./status";   // 引入状态码文件
import { ElMessage } from 'element-plus'  // 引入el 提示框
import JSONBigInt from "json-bigint"
import router from "@/router"

const $http = axios.create({
    // baseURL: "http://ergou666.shop:8000",//设置基础路由
    timeout: 5000,// 设置接口超时时间5s
    // bigInt处理
    transformResponse: [function (data) {
        try {
            return JSONBigInt({ storeAsString: true }).parse(data);
        } catch (e) {
            return data;
        }
    }]
})

//http request 拦截器   请求拦截
$http.interceptors.request.use(
    config => {
        // 配置请求头
        // config.headers = {
        //     // 'Content-Type': 'application/x-www-form-urlencoded',   // 传参方式表单
        //     'Content-Type': 'application/json;charset=UTF-8',        // 传参方式json
        //     'token': localStorage.getItem('token') || ''              // 请求头携带token
        // };
        if (config.headers) {
            config.headers['token'] = localStorage.getItem('token') || ''
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

//http response 拦截器  响应拦截
$http.interceptors.response.use(
    response => {
        if (response.data.code == 300) {
            // 重复登录
            router.push('/');
            ElMessage.warning("登录信息已过期，请重新登录！");
            localStorage.removeItem('token');
        }
        return Promise.resolve(response.data);
    },
    error => {
        const { response } = error;
        if (response.status < 200 || response.status > 299) {
            // 请求已发出，但是不在2xx的范围
            showMessage(response.status);           // 传入响应码，匹配响应码对应信息
            return Promise.reject(response.data);
        } else {
            ElMessage.warning('网络连接异常,请稍后再试!');
        }
    }
);


export default $http;
